package com.List;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * 遍历删除集合元素的两种方法
 * 遍历删除集合，要注意集合的元素删除了以后，起亚的集合会往前面移动，而迭代器和增强for会往前面移动
 * 四种遍历方式 foreach和lambda不能解决并发修改异常的问题，只能用迭代器和for循环
 */

public class ListDemo3 {
    public static void main(String[] args) {
        ArrayList<String >list=new ArrayList<>();
        list.add("python");
        list.add("java");
        list.add("java");
        list.add("scala");
        list.add("scala");
        list.add("js");
        list.add("SpringBoot");
        System.out.println(list);
        //1.使用迭代器
        Iterator<String> iterator = list.iterator();
        while(iterator.hasNext()){
            String next = iterator.next();
            if (next.equals("java")){
//                list.remove("java");   这是错误的，
                iterator.remove();//使用迭代器自带的remove方法，没次删除一个元素，迭代器对象会自动向后挪一位
            }


        }
        System.out.println(list);
        //[python, java, java, scala, js, SpringBoot]
        //[python, scala, js, SpringBoot]


        //使用for循环
        //第一种方法：没次删除一个，i就减一
//        for (int i = 0; i < list.size(); i++) {
//            if (list.get(i).equals("scala")){
//                list.remove("scala");
//                i--;
//            }
//        }



        //第二种方式：从后面开始删除
        for (int i = list.size()-1; i >=0; i--) {
            if (list.get(i).equals("scala")){
                list.remove("scala");
            }

        }
        System.out.println(list);
    }
}
